// var i;
// var $resKeeper = require("./ResKeeper");
// var s = cc._decorator;
// var l = s.ccclass;
// var u = s.property;
// var d =
//     (s.inspector,
//     (function (e) {
//         function t() {
//             var t = (null !== e && e.apply(this, arguments)) || this;
//             t.selfMask = null;
//             t.lightNode = null;
//             return t;
//         }
//         __extends(t, e);
//         t.prototype.StartSet = function (e, t, o) {
//             var n = this;
//             this.selfMask.node.width = e.width;
//             this.selfMask.node.height = e.height;
//             if (t) {
//                 this.selfMask.spriteFrame = t;
//                 this.selfMask.type = cc.Mask.Type.IMAGE_STENCIL;
//             } else {
//                 this.selfMask.type = cc.Mask.Type.RECT;
//             }
//             var i = Math.floor((2 * e.width) / 1200);
//             if (i < 1) {
//                 i = 1;
//             }
//             this.lightNode.stopAllActions();
//             this.lightNode.x = -e.width;
//             this.lightNode.runAction(
//                 cc.sequence(
//                     cc.repeat(
//                         cc.sequence(
//                             cc.moveTo(i, e.width, 0),
//                             cc.callFunc(function () {
//                                 n.lightNode.x = -e.width;
//                             })
//                         ),
//                         o
//                     ),
//                     cc.callFunc(function () {
//                         n.node.destroy();
//                     })
//                 )
//             );
//         };
//         __decorate([u(cc.Mask)], t.prototype, "selfMask", void 0);
//         __decorate([u(cc.Node)], t.prototype, "lightNode", void 0);
//         return __decorate([l], t);
//     })($resKeeper.default));
// exports.default = d;

// import ResKeeper from './ResKeeper';

// const { ccclass, property } = cc._decorator;

// /**
//  * 建议类名: LightMaskController
//  */
// @ccclass
// class UnLockLight extends ResKeeper {
//     @property(cc.Mask)
//     public selfMask: cc.Mask = null;

//     @property(cc.Node)
//     public lightNode: cc.Node = null;

//     constructor() {
//         super();
//     }

//     /**
//      * 初始化遮罩和光节点
//      * @param e 遮罩的尺寸
//      * @param t 遮罩的精灵帧
//      * @param o 光节点的重复次数
//      * 建议方法名: initializeMaskAndLightNode
//      */
//     public StartSet(e: cc.Size, t: cc.SpriteFrame, o: number): void {
//         this.selfMask.node.width = e.width;
//         this.selfMask.node.height = e.height;

//         if (t) {
//             this.selfMask.spriteFrame = t;
//             this.selfMask.type = cc.Mask.Type.IMAGE_STENCIL;
//         } else {
//             this.selfMask.type = cc.Mask.Type.RECT;
//         }

//         let duration = Math.floor((2 * e.width) / 1200);
//         if (duration < 1) {
//             duration = 1;
//         }

//         this.lightNode.stopAllActions();
//         this.lightNode.x = -e.width;
//         this.lightNode.runAction(
//             cc.sequence(
//                 cc.repeat(
//                     cc.sequence(
//                         cc.moveTo(duration, e.width, 0),
//                         cc.callFunc(() => {
//                             this.lightNode.x = -e.width;
//                         })
//                     ),
//                     o
//                 ),
//                 cc.callFunc(() => {
//                     this.node.destroy();
//                 })
//             )
//         );
//     }
// }

// export default UnLockLight;

import ResKeeper from './ResKeeper';

const { ccclass, property } = cc._decorator;

/**
 * 建议类名: LightMaskController
 */
@ccclass
class LightMaskController extends ResKeeper {
    @property(cc.Mask)
    public selfMask: cc.Mask = null;  // 遮罩组件

    @property(cc.Node)
    public lightNode: cc.Node = null;  // 光节点

    constructor() {
        super();
    }

    /**
     * 建议方法名: initializeMaskAndLightNode
     * 初始化遮罩和光节点
     * @param maskSize 遮罩的尺寸
     * @param spriteFrame 遮罩的精灵帧
     * @param repeatTimes 光节点的重复次数
     */
    public initialize(maskSize: cc.Size, spriteFrame: cc.SpriteFrame, repeatTimes: number): void {
        // 设置遮罩尺寸
        this.selfMask.node.width = maskSize.width;
        this.selfMask.node.height = maskSize.height;

        // 设置遮罩类型和精灵帧
        if (spriteFrame) {
            this.selfMask.spriteFrame = spriteFrame;
            this.selfMask.type = cc.Mask.Type.IMAGE_STENCIL;
        } else {
            this.selfMask.type = cc.Mask.Type.RECT;
        }

        // 计算动画持续时间
        let animationDuration = Math.floor((2 * maskSize.width) / 1200);
        if (animationDuration < 1) {
            animationDuration = 1;
        }

        // 停止所有当前动作并重置光节点位置
        this.lightNode.stopAllActions();
        this.lightNode.x = -maskSize.width;

        // 执行动画
        this.lightNode.runAction(
            cc.sequence(
                cc.repeat(
                    cc.sequence(
                        cc.moveTo(animationDuration, maskSize.width, 0),
                        cc.callFunc(() => {
                            this.lightNode.x = -maskSize.width;
                        })
                    ),
                    repeatTimes
                ),
                cc.callFunc(() => {
                    this.node.destroy();
                })
            )
        );
    }
}

export default LightMaskController;